"""
頁面的字段的組成是由：
1. 報表的配置
2. 額外添加的字段合成 （ex：日期、時段等等）
{"key": "4001", "value": "用户玩法统计"},
{"key": "4002", "value": "活跃用户统计"},
{"key": "4003", "value": "付费能力分析"},
{"key": "4004", "value": "活跃用户盈亏分析"},
{"key": "4005", "value": "新用戶分析"},
{"key": "4006", "value": "新用戶留存分析"},
"""
import copy
from event_rule.dwc.user_event_rule.rule_config import CONFIG
from common.es_core import report_creator


def _get_active_user_analysis_key_mapper(index):
    config = CONFIG.get('active_user_analysis', {})
    key_mapper_dct = report_creator.get_key_mapper_list(config.get('values'), index)
    return [{'key': 'day', 'name': '活跃时间'},
            {'key': '_user_id', 'name': "用户ID"},
            {'key': 'registered_at', 'name': '注册时间'},
            {'key': 'chn', 'name': '渠道'}] + key_mapper_dct


def _get_pay_ability_analysis_key_mapper(index, required_chn=True):
    config = CONFIG.get('pay_ability', {})
    key_mapper_dct = report_creator.get_key_mapper_list(config.get('values'), index)
    additional_key_mapper = [{'key': 'day', 'name': "日期"},
                             {'key': 'key', 'name': '充值档次'}]
    if required_chn:
        additional_key_mapper.append({'key': '_chn', 'name': '渠道'})
    key_mapper_dct = additional_key_mapper + key_mapper_dct
    return key_mapper_dct


def _get_new_user_key_mapper(index, required_chn=True):
    config = CONFIG.get('new_user', {})
    key_mapper_dct = report_creator.get_key_mapper_list(config.get('values'), index)
    additional_key_mapper = [{'key': 'day', 'name': "日期"}]
    if required_chn:
        additional_key_mapper.append({'key': '_chn', 'name': '渠道'})
    key_mapper_dct = additional_key_mapper + key_mapper_dct
    return key_mapper_dct


def _get_new_user_stay_key_mapper(index, required_chn=None, stay_type=None, display_type='percentage'):
    config = CONFIG.get('new_user_stay', {})
    key_mapper = report_creator.get_key_mapper_list(config.get('values'), index)
    if stay_type:
        key_mapper_bak, key_mapper = copy.deepcopy(key_mapper), []
        for key_mapper_item in key_mapper_bak:
            if stay_type in key_mapper_item['key']:
                key_mapper.append(key_mapper_item)
    if stay_type and display_type == 'percentage':
        key_mapper_bak, key_mapper = copy.deepcopy(key_mapper), []
        for key_mapper_item in key_mapper_bak:
            if key_mapper_item['key'].startswith(stay_type + '_rate') or stay_type + '_1' == key_mapper_item['key']:
                key_mapper.append(key_mapper_item)
    elif stay_type and display_type == 'normal':
        key_mapper_bak, key_mapper = copy.deepcopy(key_mapper), []
        for key_mapper_item in key_mapper_bak:
            if key_mapper_item['key'].startswith(stay_type) and stay_type + '_rate' not in key_mapper_item['key']:
                key_mapper.append(key_mapper_item)
    additional_key_mapper = [{'key': 'day', 'name': "日期"}]
    if required_chn:
        additional_key_mapper.append({'key': '_chn', 'name': '渠道'})
    key_mapper = additional_key_mapper + key_mapper
    return key_mapper


def _get_continuous_recharge_key_mapper(index, required_chn=None, recharge_stats_type=None):
    config = CONFIG.get('continuous_recharge', {})
    key_mapper = report_creator.get_key_mapper_list(config.get('values'), index)
    if recharge_stats_type:
        key_mapper_bak, key_mapper = copy.deepcopy(key_mapper), []
        for key_mapper_item in key_mapper_bak:
            if recharge_stats_type in key_mapper_item['key']:
                key_mapper.append(key_mapper_item)
    additional_key_mapper = [{'key': 'day', 'name': "日期"}]
    if required_chn:
        additional_key_mapper.append({'key': '_chn', 'name': '渠道'})
    key_mapper = additional_key_mapper + key_mapper
    return key_mapper


def _get_game_stage_key_mapper(index):
    config = CONFIG.get('game_stage_analysis', {})
    key_mapper_dct = report_creator.get_key_mapper_list(config.get('values'), index)
    additional_key_mapper = [{'key': 'day', 'name': "日期"},
                             {'key': 'game_name', 'name': "玩法"},
                             {'key': 'key', 'name': '参与区间'}]
    key_mapper_dct = additional_key_mapper + key_mapper_dct
    return key_mapper_dct


KEY_MAPPER_FUNC = {
    '4002': _get_active_user_analysis_key_mapper,
    '4003': _get_pay_ability_analysis_key_mapper,
    '4005': _get_new_user_key_mapper,
    '4006': _get_new_user_stay_key_mapper,
    '4007': _get_continuous_recharge_key_mapper,
    '4008': _get_game_stage_key_mapper
}
